package server.utils;

import java.io.File;
import java.io.IOException;
import java.net.Socket;
import DAO.TotalDao;
import model.*;
import server.main.*;
import java.util.*;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

import com.google.gson.Gson;

public class LoginChecker {
	private DAO.TotalDao totaldao;
	private static final Logger logger = Logger.getLogger(LoginChecker.class.getName());
	
	public Message check(int account,String pwd) {
		
        // 设置日志级别
        logger.setLevel(Level.INFO);
        // 创建一个文件处理器
        try {
        	String path = "." + File.separator + "log" + File.separator + "loginChecker.log";
            FileHandler fileHandler = new FileHandler(path);
            fileHandler.setLevel(Level.INFO);

            // 创建一个日志格式化器
            Formatter formatter = new SimpleFormatter();
            fileHandler.setFormatter(formatter);

            // 将处理器添加到日志记录器
            logger.addHandler(fileHandler);
        } catch (IOException e) {
            e.printStackTrace();
        }
		
		totaldao = new DAO.TotalDao(server_main.db.con);
		int userid = totaldao.userLogin(account, pwd);
		String username = totaldao.getUserName(account);
		Message mes = new Message();
		
		Integer Account = new Integer(account);
		if(server_main.onlineUsers.contains(Account)) {
			mes.setType(MsgType.ALREADY_LOGIN);
			return mes;
		}
				
		if(userid > 0) {
			mes.setUserID(userid);
			mes.setType(MsgType.LOGIN_SUCCEED);
			mes.setTime(username);              //复用time属性来传输username
			
			Hashtable<Integer, String> friends = totaldao.userFriends(account);          //好友列表
			Hashtable<Integer, Boolean> states  = new Hashtable<Integer, Boolean>();     //好友目前在线状态
			Hashtable<Integer, String> rooms = totaldao.userRooms(userid);               //群聊列表 
			Gson gson = new Gson();
			
			//通过比较在线列表onlineUsers，找到所有的在线好友
			for(Integer i : friends.keySet()) {		
				states.put(i, false);
				for(Integer j : server_main.onlineUsers) {
					if(i.equals(j)) {
						states.put(i,true);
						break;
					}					
				}
			}
			
			String rjson = gson.toJson(rooms);
			String sjson = gson.toJson(states);
			String fjson = gson.toJson(friends);
			mes.setText(fjson);
			mes.setStates(sjson);
			mes.setRooms(rjson);
						
			logger.info(fjson);
			logger.info(sjson);
			return mes;
			
		}else if(userid == -1) {
			mes.setType(MsgType.LOGIN_FAILED_WRONG);
			return mes;
		}else if(userid == -2) {
			mes.setType(MsgType.LOGIN_FAILED_NOACCOUNT);
			return mes;
		}
		return null;
	}
}